class Solution {
public:
    int findMin(vector<int>& nums) {
        // 依旧是通过二分来解决这个题目，首先是获取mid的值，然后让mid的值和最后一个元素进行比较，如果最后一个元素是大于
        // mid的说明mid一定在被分开的第二段此时的mid要么就是最小值，要么就在最小值的右边
        // 如果mid的值是大于n-1的，说明nums被划分了，并且mid是在第一段的，这一段的元素都是大于第二段的
        // 此时的最小值就在mid的左边
        int ret = 50001;
        int left = 0;
        int right = nums.size() -1;
        int n = nums.size()-1;
        while(left<=right)
        {
            int mid = (left+right)/2;
            if(nums[mid]<=nums[n])
            {
                //mid在第二段，此时的mid要么就是最小值，那么最小值在mid的左边
                ret = min(nums[mid],ret);
                right = mid-1;
            }
            else
            {
                //此时的mid在第一段，mid不可能是最小值，最小值一定在mid的右边
                left = mid+1;
            }
        }
        return ret;
    }
};